package main.impl;

import main.api.GPSRule;
import main.api.GPSState;
import main.exception.NotAppliableException;


public class GPSRuleImpl implements GPSRule {
	
	private String name;
	//1 individual, 2 individual, 3 horizontal, 4 vertical
	private TipoFicha tipoFicha;
	//1 izq, 2 derecha, 3 abajo, 4 arriba
	private Movimientos tipoMov;
	private TipoCosto costo;

	public GPSRuleImpl(String name, TipoFicha tipoFicha, Movimientos tipoMov, TipoCosto costo) {
		super();
		this.name = name;
		this.tipoFicha = tipoFicha;
		this.tipoMov = tipoMov;
		this.costo = costo;
	}

	@Override
	public Integer getCost() {
		switch (this.costo) {
		case CANTMOV:
			return 1;
		case MOVTAM:
			if(tipoFicha==TipoFicha.blancoh || tipoFicha==TipoFicha.blancov)
				return 1;
			return 2;
		default:
			return 1;
		}
	}

	@Override
	public String getName() {
		return name;
	}

	@Override
	public GPSState evalRule(GPSState state) throws NotAppliableException {
		
		GPSStateImpl finalState = new GPSStateImpl(state);
		finalState.move(tipoFicha,tipoMov);
		return finalState;
	}

}
